//输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有奇数位于数组的前半部分，所有偶数位于数组的后半部分。 
//
// 
//
// 示例： 
//
// 输入：nums = [1,2,3,4]
//输出：[1,3,2,4] 
//注：[3,1,2,4] 也是正确的答案之一。 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 50000 
// 1 <= nums[i] <= 10000 
// 
// 👍 34 👎 0

package leetcode.editor.cn;

import com.sun.org.apache.bcel.internal.generic.FADD;

//Java：调整数组顺序使奇数位于偶数前面
public class PJzOffer21DiaoZhengShuZuShunXuShiQiShuWeiYuOuShuQianMianLcof {
    public static void main(String[] args) {
        Solution solution = new PJzOffer21DiaoZhengShuZuShunXuShiQiShuWeiYuOuShuQianMianLcof().new Solution();
        int nums[]=new int[]{1,2,3,4};
        solution.exchange1(nums);
        for(int e:nums){
            System.out.print(e+" ");
        }
        System.out.println();

       // System.out.println(3&1);
        // TO TEST
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        /*
        * 首尾双指针
        * */
        public int[] exchange(int[] nums) {
            if (nums == null) {
                return nums;
            }

            int begin = 0, end = nums.length - 1;

            while (begin < end) {
                while (nums[begin] % 2 == 0&&begin<end) {
                    swap(nums,begin,end);
                    end--;
                }
                begin++;
            }

            return nums;
        }

        /*
        * 快慢指针，快指针找奇数，慢指针记录应该交换的位置
        * 1 2 3  4
        * */
        public int[] exchange1(int[] nums) {
            if (nums == null) {
                return nums;
            }

            int slow=0,fast=0;

            while(fast<nums.length){
              if((nums[fast]&1)!=0)//奇数
                  swap(nums,slow++,fast);
              fast++;
            }

            return nums;
        }

        public void swap(int[] nums, int i, int j) {
            int tmp=nums[i];
            nums[i]=nums[j];
            nums[j]=tmp;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
